﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Datos.SqlServer;

namespace Sistema_Totem.Logica.Clases
{
    public class CasoDeUso
    {

        private int id;
        private String codigo;
        private int numero;
        private String nombre;
        private int secciones;
        private String requerimiento;


        #region Constructores

        public CasoDeUso()
        {


        }

        public CasoDeUso(String codigo, int numero, String nombre, int secciones)
        {


            Codigo = codigo;
            Numero = numero;
            Nombre = nombre;
            Secciones = secciones;
        }


        public CasoDeUso(int id, String codigo, int numero, String nombre, int secciones, String requerimiento)
        {
            Id = id;
            Codigo = codigo;
            Numero = numero;
            Nombre = nombre;
            Secciones = secciones;
            Requerimiento = requerimiento;
        }


        public CasoDeUso(int id, String codigo, String nombre, String requerimiento)
        {
            Id = id;
            Codigo = codigo;
            Nombre = nombre;
            Requerimiento = requerimiento;
        }

        #endregion Constrcutores

        #region Encapsulamiento de Atributos

        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        public String Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }

        public int Numero
        {
            get { return numero; }
            set { numero = value; }
        }

        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public int Secciones
        {
            get { return secciones; }
            set { secciones = value; }
        }

        public String Requerimiento
        {
            get { return requerimiento; }
            set { requerimiento = value; }
        }

        #endregion Encapsulamiento de Atributos

        #region Metodo Equals

        public override bool Equals(object obj)
        {

            if (obj == null || GetType() != obj.GetType())
            {

                return false;
            }

            CasoDeUso c = (CasoDeUso)obj;

            return (Id == c.Id) && (Nombre == c.Nombre) && (Codigo == c.Codigo) && (Numero == c.Numero) && (Secciones == c.Secciones);
        }


        #endregion Metodo Equals

        #region Consultar Casos de Uso Proyecto

        public List<CasoDeUso> ConsultarCasosdeUsoProyecto(int idProyecto)
        {

            return new SqlServerCasosDeUso().ConsultarTodosCasosDeUso(idProyecto);

        }

        #endregion Consultar Casos de Uso Proyecto

        #region Consultar Detalle Cu

        public CasoDeUso DetalleCasodeUso(int idCU)
        {

            return new SqlServerCasosDeUso().DetalleCasodeUso(idCU);

        }


        #endregion  Consultar Detalle Cu

        #region Plantilla del Caso de Uso

        private int PlantillaCasodeUso(int idProyecto)
        {

            return new SqlServerCasosDeUso().PlantillaCasodeUso(idProyecto);
        }


        #endregion Plantilla del Caso de Uso

        #region Secciones de la Plantilla

        public List<Seccion> SeccionesPlantilla(int idProyecto)
        {
            return new SqlServerCasosDeUso().SeccionesCasodeUso(PlantillaCasodeUso(idProyecto));
        }


        #endregion Secciones de la Plantilla

        #region Elementos de la Seccion

        public List<Elemento> ElementosSeccion(int idSeccion)
        {
            return new SqlServerCasosDeUso().ElementosSeccion(idSeccion);
        }


        #endregion Elementos de la Seccion

        #region Pintar Plantilla para Consulta

        public String PintarCasodeUsoConsulta(int idCU, int idProyecto, String cssClassSeccion, String cssClassElemento, String cssClassContenidoElemento)
        {

            String casoUso="";

            int idPlantilla = PlantillaCasodeUso(idProyecto);
            
            
            List<Seccion> secciones = SeccionesPlantilla(idProyecto);
           
            SqlServerCasosDeUso sqlServerCasoDeUso= new SqlServerCasosDeUso();

            foreach (Seccion seccion in secciones)
            {
                casoUso += HtmlSeccion(seccion.Nombre, cssClassSeccion)+System.Environment.NewLine;

                List<Elemento> elementos =ElementosSeccion(seccion.Id);

                foreach (Elemento elemento in elementos)
                {

                    int idPlantillaProyectoElemento = sqlServerCasoDeUso.PlantillaProyectoElemento(elemento.Id, idProyecto);
                    String valorElemento = sqlServerCasoDeUso.ValorElemento(idPlantillaProyectoElemento, idCU);
                   
                    casoUso += HtmlElemento(elemento.Nombre, valorElemento, cssClassElemento, cssClassContenidoElemento) + System.Environment.NewLine;
                   
                }

                casoUso += "</div>" + System.Environment.NewLine;
            }

            
            return casoUso;
        }
        





        #region Definiciones graficas de Vista para la consulta del CU


        /// <summary>
        // Define como se vera una seccion
        // a nivel grafico.
        /// </summary>
        private String HtmlSeccion(String nombre,String cssClass)
        {
            return "<div class=\"Seccion\"> <h3 class=\""+cssClass+"\">" + nombre + "</h3>";
        }

        /// <summary>
        // Define como se vera un elemento
        // a nivel grafico.
        /// </summary>

        private String HtmlElemento(String nombre, String Valor, String cssClassElemento, String cssClassContenidoElemento)
        {
            return "<div class=\"Elemento\"> <h4 class=\"" + cssClassElemento + "\">" + nombre + "</h4> <h5  class=\"" + cssClassContenidoElemento + "\">" + Valor + "</h5> </div>";
        }




        #endregion Definiciones graficas de Vista para la consulta del CU


        #endregion  Pintar Plantilla para Consulta

        #region Metodo AgregarCasodeUso

        public int AgregarCasodeUso(CasoDeUso casodeuso, int idRequerimiento)
        {
            SqlServerCasosDeUso sqlCasosdeUso = new SqlServerCasosDeUso();

            return sqlCasosdeUso.AgregarCasoDeUso(casodeuso, idRequerimiento);

        }


        #endregion Metodo AgregarCasodeUso

        #region Eliminar Caso de Uso

        public int EliminarCasodeUso(int idCasoUso)
        {
            return new SqlServerCasosDeUso().EliminarCasoDeUso(idCasoUso);
        }

        #endregion Eliminar Caso de Uso


    }
}